package br.com.sgmf.service;

import java.util.Date;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.sgmf.dao.OrdemServicoDAO;
import br.com.sgmf.dao.PecaDAO;
import br.com.sgmf.enums.StatusOS;
import br.com.sgmf.model.ItemOrdem;
import br.com.sgmf.model.OrdemServico;
import br.com.sgmf.model.Peca;
import br.com.sgmf.model.Veiculo;

@Service
public class OrdemServicoService {

	@Autowired
	private OrdemServicoDAO ordemServicoDAO;

	@Autowired
	private PecaDAO pecaDAO;

	public void saveOrUpdate(OrdemServico ordemServico, Date data,
			Veiculo veiculo, Set<ItemOrdem> itensOrdem) {
		ordemServico.setData(data);
		ordemServico.setVeiculo(veiculo);
		ordemServico.setItensOrdem(itensOrdem);
		if (ordemServico.getId() == null) {
			ordemServicoDAO.save(ordemServico);
		} else {
			ordemServicoDAO.update(ordemServico);
		}
		// FIXME: alteração na quantidade de peças
		if (CollectionUtils.isNotEmpty(ordemServico.getItensOrdem())) {
			for (ItemOrdem itemOrdem : itensOrdem) {
				Peca peca = itemOrdem.getPeca();
				peca.subtrairQuantidade(itemOrdem.getQuantidade());
				pecaDAO.update(peca);
			}
		}
	}

	public void delete(OrdemServico ordemServico) {
		ordemServicoDAO.delete(ordemServico);
	}

	public List<OrdemServico> findAll() {
		return ordemServicoDAO.findAll();
	}

	public List<OrdemServico> findBetweenDate(Date inicio, Date fim,
			StatusOS statusOS) {
		return ordemServicoDAO.findBetweenDate(inicio, fim, statusOS);
	}

}
